package com.clarence.dada.modular.system.resource.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.clarence.dada.core.base.PageResult;
import com.clarence.dada.modular.system.resource.entity.SysResourceEntity;
import com.clarence.dada.modular.system.resource.entity.req.SysResourceReq;
import com.clarence.dada.modular.system.resource.entity.resp.SysResourceResp;

import java.util.Set;

/**
 * 资源服务类
 *
 * @author GD
 * @since 2020/11/24 19:56
 */
public interface SysResourceService extends IService<SysResourceEntity> {

    /**
     * 添加系统资源
     *
     * @param req 添加参数
     * @author GD
     * @since 2020/4/14 11:14
     */
    void resourceAdd(SysResourceReq req);

    /**
     * 编辑系统资源
     *
     * @param req 编辑参数
     * @author GD
     * @since 2020/4/14 11:15
     */
    void resourceEdit(SysResourceReq req);

    /**
     * <p>
     * 查看系统资源信息
     * <p>
     *
     * @param req 系统资源请求实例
     * @return 系统资源响应实例
     * @author GD
     * @since 2020/4/14 11:15
     */
    SysResourceResp resourceDetail(SysResourceReq req);

    /**
     * 删除系统资源
     *
     * @param req 删除参数
     * @author GD
     * @since 2020/4/14 11:15
     */
    void resourceDelete(SysResourceReq req);

    /**
     * 获取资源分页列表
     *
     * @param req 系统资源请求实例
     * @return 返回结果
     * @author GD
     * @since 2020/11/24 20:45
     */
    PageResult<SysResourceResp> resourcePage(SysResourceReq req);

//    /**
//     * 通过应用code获取获取资源下拉列表
//     * <p>
//     * 只获取菜单资源
//     *
//     * @param sysResourceReq 请求参数
//     * @return 响应下拉结果
//     * @author GD
//     * @since 2020/11/24 20:45
//     */
//    List<SysResourceEntity> findList(SysResourceReq req);
//
//    /**
//     * 获取角色绑定的资源树列表，用于分配接口权限
//     *
//     * @param roleId          角色id
//     * @param treeBuildFlag   true-带树形结构，false-不组装树形结构的
//     * @param resourceBizType 资源的类型，1-业务类，2-系统类
//     * @author GD
//     * @since 2022/9/28 23:46
//     */
//    List<ResourceTreeNode> getRoleResourceTree(Long roleId, Boolean treeBuildFlag, Integer resourceBizType);
//
//    /**
//     * 获取资源绑定列表（业务通用）
//     *
//     * @param resourceCodes   业务已经绑定的资源的编码集合
//     * @param treeBuildFlag   是否要构建成树
//     * @param resourceBizType 资源的类型，1-业务类，2-系统类
//     * @author GD
//     * @since 2021/8/8 22:24
//     */
//    List<ResourceTreeNode> getResourceList(List<String> resourceCodes, Boolean treeBuildFlag, Integer resourceBizType);
//
//    /**
//     * 获取资源的详情
//     *
//     * @param sysResourceVo 请求参数
//     * @return 资源详情
//     * @author GD
//     * @since 2020/12/18 16:04
//     */
//    ResourceDefinition getApiResourceDetail(SysResourceVo sysResourceVo);
//
//    /**
//     * 删除某个项目的所有资源
//     *
//     * @param projectCode 项目编码，一般为spring application name
//     * @author GD
//     * @since 2020/11/24 20:46
//     */
//    void deleteResourceByProjectCode(String projectCode);
//
//    /**
//     * 更新资源编码前缀，将guns$前缀改为新的
//     *
//     * @author GD
//     * @since 2022/11/17 0:17
//     */
//    void updateResourceAppCode(String newAppCode);

    /**
     * 获取资源的url列表，根据资源code集合查询
     *
     * @param resourceCodes 资源编码集合
     * @return 资源url列表
     * @author fengshuonan
     * @since 2020/11/29 19:49
     */
    Set<String> getResourceUrlsListByCodes(Set<String> resourceCodes);
}
